1 using UnityEngine;
2 using
UnityEngine.EventSystems;
3 using
UnityEngine.UI;
4
5 namespace
ProceduralToolkit.Examples
6 {

7     ///
<summary>
8     ///
Simple camera controller
9     ///
</summary>
10     
[RequireComponent(typeof (Image))]
11     
public class CameraRotator : UIBehaviour, IDragHandler
12     {
13         
public Transform cameraTransform;
14         
public Transform target;
15         
[Header("Position")]
16         
public float distanceMin = 10;
17         
public float distanceMax = 30;
18         
public float yOffset = 0;
19         
public float scrollSensitivity = 1000;
20         
public float scrollSmoothing = 10;
21         
[Header("Rotation")]
22         
public float tiltMin = -85;
23         
public float tiltMax = 85;
24         
public float rotationSensitivity = 0.5f;
25         
public float rotationSpeed = 20;
26
27         
private float distance;
28         
private float scrollDistance;
29         
private float velocity;
30         
private float lookAngle;
31         
private float tiltAngle;
32         
private Quaternion rotation;
33
34         
protected override void Awake()
35         {
36             
base.Awake();
37             tiltAngle = (tiltMin + tiltMax)/
2;
38             distance = scrollDistance = (distanceMax + distanceMin)/
2;
39
40             
if (cameraTransform == null || target == null) return;
41
42             cameraTransform.rotation = rotation = Quaternion.Euler(tiltAngle, lookAngle,
0);
43             cameraTransform.position = CalculateCameraPosition();
44         }
45
46         
private void LateUpdate()
47         {
48             
if (cameraTransform == null || target == null) return;
49
50             
if (cameraTransform.rotation != rotation)
51             {
52                 cameraTransform.rotation = Quaternion.Lerp(cameraTransform.rotation, rotation,
53                     Time.deltaTime*rotationSpeed);
54             }
55
56             
float scroll = Input.GetAxis("Mouse ScrollWheel");
57             
if (scroll != 0)
58             {
59                 scrollDistance -= scroll*Time.deltaTime*scrollSensitivity;
60                 scrollDistance = Mathf.Clamp(scrollDistance, distanceMin, distanceMax);
61             }
62
63             
if (distance != scrollDistance)
64             {
65                 distance = Mathf.SmoothDamp(distance, scrollDistance,
ref velocity, Time.deltaTime*scrollSmoothing);
66             }
67
68             cameraTransform.position = CalculateCameraPosition();
69         }
70
71         
public void OnDrag(PointerEventData eventData)
72         {
73             
if (cameraTransform == null || target == null) return;
74
75             lookAngle += eventData.delta.x*rotationSensitivity;
76             tiltAngle -= eventData.delta.y*rotationSensitivity;
77             tiltAngle = Mathf.Clamp(tiltAngle, tiltMin, tiltMax);
78             rotation = Quaternion.Euler(tiltAngle, lookAngle,
0);
79         }
80
81         
private Vector3 CalculateCameraPosition()
82         {
83             
return target.position + cameraTransform.rotation*(Vector3.back*distance) + Vector3.up*yOffset;
84         }
85     }
86 }


Gõ tìm kiếm nhanh...